package xyz.lwm.lazycat.web.annocation;

import xyz.lwm.lazycat.utility.convert.Converter;
import xyz.lwm.lazycat.utility.reflect.AliasTo;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 接收参数. <br>
 * 既可以通过 {@link Form} 注解标记在方法参数上, 也可以标记在方法参数对象的属性上, 同时也可以接收非表单请求的参数
 *
 * @author lwm
 * @see Form
 */
@Target({PARAMETER, FIELD})
@Retention(RUNTIME)
public @interface Param {

    /**
     * 参数名称
     */
    @AliasTo("name")
    String value() default "";

    /**
     * 参数名称
     */
    @AliasTo("value")
    String name() default "";

    /**
     * 日期(时间)格式; yyyy-MM-dd HH:mm:ss ; yyyy-MM-dd
     */
    String dateFormat() default "";

    /**
     * 参数转换器
     */
    Class<? extends Converter> converter() default Converter.class;

}
